.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
.TH "CMTIME" 1 "2017-04-28" "librdmacm" "librdmacm" librdmacm
.SH NAME
cmtime \- RDMA CM connection steps timing test.
.SH SYNOPSIS
.sp
.nf
\fIcmtime\fR [-s server_address] [-b bind_address]
			[-c connections] [-p port_number]
			[-q base_qpn]
			[-r retries] [-t timeout_ms]
.fi
.SH "DESCRIPTION"
Determines min, max, and average times for various "steps" in RDMA CM
connection setup and teardown between a client and server
application.

"Steps" that are timed are: create ID, bind address, resolve address,
resolve route, create QP, modify QP to INIT, modify QP to RTR,
modify QP to RTS, CM connect, client establish, disconnect, destroy QP,
and destroy ID.

Many operations are asynchronous, allowing progress on multiple connections
simultanesously.  The 'sum' output adds the time that all connections took
for a given step.  The average 'us/conn' is the sum divided by the number
of connections.  This is useful to identify steps which take a significant
amount of time.  The min and max values are the smallest and largest times
that any single connection took to complete a given step.

The 'total' and 'avg/iter' times measure the time to complete a given step
for all connections.  These two values take into account asynchronous
operations.  For steps which are serial, the total and sum values will be
roughly the same.  For asynchronous steps, the total may be significantly
lower than the sum, as multiple connections will be in progress simultanesously.
The avg/iter is the total time divided by the number of connections.

In many cases, times may not be available or only available on the client.
Is such situations, the output will show 0.
.SH "OPTIONS"
.TP
\-s server_address
The network name or IP address of the server system listening for
connections.  The used name or address must route over an RDMA device.
This option must be specified by the client.
.TP
\-b bind_address
The local network address to bind to.
.TP
\-c connections
The number of connections to establish between the client and
server.  (default 100)
.TP
\-p port_number
The server's port number.
.TP
\-q base_qpn
The first QP number to use when creating connections without allocating
hardware QPs.  The test will use the values between base_qpn and base_qpn
plus connections when connecting.  (default 1000)
.TP
\-n num_threads
Sets the number of threads to spawn used to process connection events
and hardware operations.  (default 1)
.TP
\-m mimic_qp_delay_us
"Simulates" QP creation and modify calls by replacing them with a
simple sleep function instead.  This allows testing the CM at larger
scale than would be practical, or even possible given system
configuration settings, if HW resources needed to be allocated.
.TP
\-r retries
Number of retries when resolving address or route.  (default 2)
.TP
\-S
Run connection rate test using sockets.  This provides a baseline
comparison of RDMA connections versus TCP connections.  Sockets are
set to blocking mode.
.TP
\-t timeout_ms
Timeout in millseconds (ms) when resolving address or
route.  (default 2000 - 2 seconds)
.SH "NOTES"
Basic usage is to start cmtime on a server system, then run
cmtime -s server_name on a client system.
.P
Because this test maps RDMA resources to userspace, users must ensure
that they have available system resources and permissions.  See the
libibverbs README file for additional details.
.SH "SEE ALSO"
rdma_cm(7)
